/*
-----------------------------------------------------------------------------
This source file is part of DIVA
The project of Engineering Lab, dept. of CSIE, NTNU.

Copyright (c) 2000-2006 The Engineering Lab, dept. of CSIE, NTNU.
-----------------------------------------------------------------------------
Filename:    MyScanner.h
Description: 處理math node的scanner，與compiler中的scanner類似
			 將字串處理成tokens

-----------------------------------------------------------------------------
*/
#ifndef _MY_SCANNER_H_
#define _MY_SCANNER_H_

#include <string>
#include <queue>
#include "MyWord.h"

using namespace std;

class MyScanner
{
public:
	
	~MyScanner(void);

	/** context為一方程式，利用回傳的string判斷是否符合格式
		"TRUE"	表是符合格式
		除此之外的回傳值代表發生的錯誤情況
	*/
	string isLexical(string context,int size);

	/** 回傳正規化後的tokens */
	queue<MyWord*>* getTokens();

	static MyScanner* getInstance();

private:

	MyScanner(void);

	/** 將字串中英文字母的部分都轉為小寫 */
	string toLowerCase(string token);

	/** 將字串中英文字母的部分都轉為大寫 */
	string toUpperCase(string token); 

	/** 所有的check都在patternCheck中集中處理 */
	bool patternCheck(string token);

	bool normalCheck(string token);

	/** 處理id、int、double */
	bool regexCheck(string token);

	bool idCheck(string token);
	bool intCheck(string token);
	bool doubleCheck(string token);

	queue<MyWord*>* _tokens;
	static MyScanner* _myScanner;
	int _size;
	string _result;
};
#endif